package com.apps.puzzle;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class Puzzle extends Activity{
	
	private Gallery galeria;
	private GridView gridview;
	private TextView cronoView;
	private static Cronometro cronometro;
	private ImageAdapter info;
	private int posicionGaleria;
	private int numeroFotoDrawable=0;
	private boolean seleccionGaleria=false;
	private ArrayList<Integer> fotos;
	//Carga de imagenes en la matriz Grid
	private Integer[] imagenesMatriz= {
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2,
			R.drawable.android_2
			};
	 String[] valores = new String[] { "Android", "iPhone", "WindowsMobile",
		        "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
		        "Linux", "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux",
		        "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2",
		        "Android", "iPhone", "WindowsMobile" };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.menuprincipal);
      
        galeria = (Gallery) findViewById(R.id.gallery);
        gridview = (GridView) findViewById(R.id.gridview);
        cronoView = (TextView) findViewById(R.id.cronometro);
        
        //Creamos el cronometro
        cronometro = new Cronometro(cronoView,30000,10);
        		
        
        
        //Inicializamos el cronometro
        cronometro.start();
        
        gridview.setAdapter(new GridAdapter(this));
        gridview.setNumColumns(4);
        
        //Carga de imagenes en la galeria
        fotos = new ArrayList<Integer>();
        fotos.add(R.drawable.ic_launcher);
        fotos.add(R.drawable.ic_launcher);
        fotos.add(R.drawable.ic_launcher);
        fotos.add(R.drawable.ic_launcher);
        galeria.setAdapter(new ImageAdapter(this,fotos));
 
        gridview.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View v, int posicion, long id) {
            	if (seleccionGaleria)
            	{	
            		
            		
            		//Se borra la foto de la galeria y se adapta a la galeria
                    fotos.remove(posicionGaleria);
                    galeria.setAdapter(new ImageAdapter(getApplicationContext(),fotos));     	
                    //Actualizamos el Grid con el nuevo cambio de foto
                    imagenesMatriz=modificacionImagenesMatriz(posicion, numeroFotoDrawable);    
                    gridview.setAdapter(new GridAdapter(getApplicationContext()));
                    seleccionGaleria=false;   
                    
            	}
              }
           });
        
        //Elemento seleccionado de la galeria
        galeria.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView parent, View v, int posicion, long id) {
                
            	//Elemento elegido de la galeria
            	Toast.makeText(getApplicationContext(), "" + posicion, Toast.LENGTH_SHORT).show();
            	//Numero del archivo PNG 
            	numeroFotoDrawable =fotos.get(posicion);
            	//Posicion de la galeria a eliminar cuando se coloque en el tablero
            	posicionGaleria=posicion;
            	seleccionGaleria=true;
            }
        });
    }
    
    //Modificacion de la foto en una posicion de la matriz determinada
    public Integer[] modificacionImagenesMatriz(int posicionGaleria, int fotoAcambiar){
    	imagenesMatriz[posicionGaleria] = fotoAcambiar; 
    	return imagenesMatriz;
    }
    

    
  //Clase auxiliar que pone las imagenes de fondo en el GridLayout   
  public class GridAdapter extends BaseAdapter {
    	
    	private Context mContext;

		public GridAdapter(Context c) {
			mContext = c;
		}

		@Override
		public int getCount() {
			return imagenesMatriz.length;
		}

		@Override
		public Object getItem(int arg0) {
			return imagenesMatriz[arg0];
		}
 
		@Override
		public long getItemId(int arg0) {
			return arg0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) { 
			
			View grid;
			 
			if(convertView==null){
				grid = new View(mContext);
				LayoutInflater inflater=getLayoutInflater();
				grid=inflater.inflate(R.layout.mygrid_layout, parent, false);
			}else{
				grid = (View)convertView;
			}
			
			ImageView imageView = (ImageView)grid.findViewById(R.id.image);
			imageView.setImageResource(imagenesMatriz[position]);
			return grid;
		}

	}

}